import tensorflow as tf #调用tensorflow模块
from PIL import Image #从图像处理库中导入Image模块来对80张图片进行处理

tf.compat.v1.disable_eager_execution()

#用来存放读取TFRecords文件的数据内容
read_for_path = 'D:/大学工作/网络开放源码体系/MyProject/zhenjiakankankan/Shoes_Check/AJ_Picture/outputdata/'

#读入之前写好的tfrecords文件
def read_and_decode(filename):
    '''创建一个解析队列，通过使用trian.string_input_producer使其按照要求排序成一个队列'''
    filename_queue = tf.compat.v1.train.string_input_producer([filename]) #因为版本问题要加上compat.v1.
    
    reader = tf.compat.v1.TFRecordReader(options=None)#用来解析队列

    _, serialized_example = reader.read(filename_queue)#解析器所读取解析队列的变量
    '''将Examplexie协议缓冲区解析为张量'''
    features = tf.compat.v1.parse_single_example(serialized_example,
                                       # 将image数据和label取出来
                                       features={
                                           'label': tf.compat.v1.FixedLenFeature([], tf.int64),
                                           'img_raw': tf.compat.v1.FixedLenFeature([], tf.string),
                                       })

    img = tf.compat.v1.decode_raw(features['img_raw'],tf.uint8)#将读取出来的张量进行解码


    img = tf.reshape(img,[64,64,3])#reshape为64*64的3通道图片

    '''在流中抛出label张量'''
    label = tf.cast(features['label'],tf.int32)
    return img,label

'''使用上述定义函数将TFRecords文件读取出来'''
image, label = read_and_decode("D:/大学工作/网络开放源码体系/MyProject/zhenjiakankankan/Shoes_Check/Prepare_Data/AJshoes_For_train.tfrecords")

#开始一个会话
with tf.compat.v1.Session() as sess:
    init_op = tf.compat.v1.global_variables_initializer()
    sess.run(init_op)
    coord = tf.train.Coordinator()#创建一个协调器，管理线程
    threads = tf.compat.v1.train.start_queue_runners(coord = coord)#启动QueueRunner，此时文件名队列已经进队
    for i in range(80):#80张图片
        #在会话中取出Image和label
        example, l = sess.run([image,label])
        img = Image.fromarray(example,'RGB')
        '''存下图片'''
        img.save(read_for_path + str(i) + '_''Label_'+str(l)+'.jpg')
        print("~~~~~~~~~~~~")#分割线
        print(example,l)
    coord.request_stop()
    coord.join(threads)